package sv.gob.mh.dgii.model.pojos.ruc;

import java.io.Serializable;
import java.util.Date;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.Pattern;

import org.hibernate.validator.constraints.NotEmpty;
import org.springframework.format.annotation.DateTimeFormat;

import sv.gob.mh.dgii.common.Utils;
import sv.gob.mh.dgii.model.RcRuc;
import sv.gob.mh.dgii.model.TbClaseContrib;
import sv.gob.mh.dgii.model.TbMunicipio;
import sv.gob.mh.dgii.model.TbPais;
import sv.gob.mh.dgii.model.TbTipoContrib;
import sv.gob.mh.dgii.model.TbTipoContribId;
import sv.gob.mh.dgii.model.custom.constraints.Nit;

public class QueryRuc implements Serializable {

	private static final long serialVersionUID = -3914718132155923977L;

	//Uso este tipo de validacion porque solo se activa si los campos no vienen nulos
	@Pattern(regexp="^\\d{4}[-| ]?\\d{6}[-| ]?\\d{3}[-| ]?\\d{1}$")
	private String nit;
	
	private String nitRaiz;
	private String s1apeRasoc;
	private String s2apeAbrev;
	private String snombres;
	private String nomComerc;
	
	@Pattern(regexp="^\\d{8}[-]?\\d{1}$")
	private String dui;
	
	@DateTimeFormat(pattern="dd/MM/yyyy")
	private Date fnacConstStr;
	
	@Pattern(regexp="\\d{7}$")
	private String nrc;
	
	//J = Juridico, N = Natural, T = Todos
	@Pattern(regexp="^[J|N|T]$")
	private String tipoContribuyente;
        
        @NotNull
        private TbMunicipio tbMunicipio;
        
        private TbPais tbPais;
	
        //String para verificar luego mas tarde durante una posible
        //inscripcion que esta busqueda es la misma que se analizo
        //en el analisis de riesgo
        private String hash;

	public String getNit() {
		return nit;
	}
	public void setNit(String nit) {
		this.nit = nit;
	}
	public String getNitRaiz() {
		return nitRaiz;
	}
	public void setNitRaiz(String nitRaiz) {
		this.nitRaiz = nitRaiz;
	}
	public String getS1apeRasoc() {
		return s1apeRasoc;
	}
	public void setS1apeRasoc(String s1apeRasoc) {
		this.s1apeRasoc = s1apeRasoc;
	}
	public String getS2apeAbrev() {
		return s2apeAbrev;
	}
	public void setS2apeAbrev(String s2apeAbrev) {
		this.s2apeAbrev = s2apeAbrev;
	}
	public String getSnombres() {
		return snombres;
	}
	public void setSnombres(String snombres) {
		this.snombres = snombres;
	}
	public String getNomComerc() {
		return nomComerc;
	}
	public void setNomComerc(String nomComerc) {
		this.nomComerc = nomComerc;
	}
	public String getDui() {
		return dui;
	}
	public void setDui(String dui) {
		this.dui = dui;
	}
	public Date getFnacConstStr() {
		return fnacConstStr;
	}
	public void setFnacConstStr(Date fnacConstStr) {
		this.fnacConstStr = fnacConstStr;
	}
	public String getNrc() {
		return nrc;
	}
	public void setNrc(String nrc) {
		this.nrc = nrc;
	}
	public String getTipoContribuyente() {
		return tipoContribuyente;
	}
	public void setTipoContribuyente(String tipoContribuyente) {
		this.tipoContribuyente = tipoContribuyente;
	}
        
        //Utilizado para comparar el riesgo de inscripcion
        public RcRuc getRcRuc(){            
            RcRuc ruc = new RcRuc();
            ruc.setNit(nit);
            ruc.setS1apeRasoc(s1apeRasoc);
            ruc.setS2apeAbrev(s2apeAbrev);
            ruc.setSnombres(snombres);
            ruc.setFnacConst(fnacConstStr);
            ruc.setTbPais(tbPais);
            ruc.setTbMunicipio(tbMunicipio);  
            TbTipoContrib tipoContrib = new TbTipoContrib();
            TbTipoContribId tipoId = new TbTipoContribId();
            tipoId.setCclase(tipoContribuyente);
            tipoContrib.setId(tipoId);
            ruc.setTbTipoContrib(tipoContrib);            
            return ruc;
        }
	
	public String getNitClean(){
		if (Utils.isNullOrEmpty(this.nit)) {
			return this.nit;
		}
		String temp = this.nit.replace("-", "");
		return temp;
	}

    /**
     * @return the tbMunicipio
     */
    public TbMunicipio getTbMunicipio() {
        return tbMunicipio;
    }

    /**
     * @param tbMunicipio the tbMunicipio to set
     */
    public void setTbMunicipio(TbMunicipio tbMunicipio) {
        this.tbMunicipio = tbMunicipio;
    }

    /**
     * @return the tbPais
     */
    public TbPais getTbPais() {
        return tbPais;
    }

    /**
     * @param tbPais the tbPais to set
     */
    public void setTbPais(TbPais tbPais) {
        this.tbPais = tbPais;
    }

    
    
    @Override
    public String toString() {
        return "QueryRuc{" + "nit=" + nit + ", nitRaiz=" + nitRaiz + ", s1apeRasoc=" + s1apeRasoc + ", s2apeAbrev=" + s2apeAbrev + ", snombres=" + snombres + ", nomComerc=" + nomComerc + ", dui=" + dui + ", fnacConstStr=" + fnacConstStr + ", nrc=" + nrc + ", tipoContribuyente=" + tipoContribuyente + ", tbMunicipio=" + tbMunicipio + ", tbPais=" + tbPais + '}';
    }

    /**
     * @return the hash
     */
    public String getHash() {
        return hash;
    }

    /**
     * @param hash the hash to set
     */
    public void setHash(String hash) {
        this.hash = hash;
    }
    
    
	

}
